#include <SoftwareSerial.h>
#include <String.h>

class SerialStringReceiver
{
private:
    SoftwareSerial ss;
    char buffer[256];
    int bufferIndex = 0;
    unsigned long lastReadTime = 0;     // 用于跟踪最后一次读取数据的时间
    const unsigned long timeout = 1000; // 假设的超时时间，单位毫秒
public:
    SerialStringReceiver(int rxPin, int txPin) : ss(rxPin, txPin) {}

    void begin(long speed)
    {
        ss.begin(speed);
    }

    // 读取一行字符串，直到遇到换行符或回车符
    String readString()
    {
        String result = "";
        lastReadTime = millis();
        while (true)
        {
            if (ss.available() > 0)
            {
                char c = ss.read();
                if (c == '\n' || c == '\r')
                {
                    break; // 检测到结束符
                }
                result += c;
            }
            else
            {
                if (millis() - lastReadTime > timeout)
                {
                    break;
                }
            }
        }
        return result;
    }

    // 你可以根据需要添加其他函数，比如检查是否有新数据可用
    bool hasData()
    {
        return ss.available() > 0 || bufferIndex > 0;
        // 注意：这里的 bufferIndex 实际上在上面的 readString() 实现中并未使用
        // 如果你想要即时检查缓冲区中的数据，你需要修改 readString() 来使用 buffer
    }

    // ... 其他你需要的函数
};
